#ifndef LIGHT_HPP
#define LIGHT_HPP

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <string>
#include <Math/Vector.hpp>
#include <Math/Matrix.hpp>
#include <Rendering/Projection.hpp>
#include <Tools/SmartPointer.hpp>

namespace Geometry {

//-----------------------------------------------------------------------------
class Light;
typedef Tools::SmartPointer<Light> TLightPointer;
//-----------------------------------------------------------------------------
class Light : public Rendering::IPointOfView {
public:				
	// Destructor
	~Light();
	// Create a light
	static TLightPointer CreateLight(const Vector::Vector3& position, const Vector::Vector3& direction);
	//
	void Transform(const Matrix::Matrix4& transformation);
	// Get position 6 direction
	Vector::Vector3& GetPosition();
	Vector::Vector3& GetDirection();
protected:			
	virtual void UpdateProjectionMatrix();
	virtual void UpdateViewMatrix();
	// Constructor
	Light(const Vector::Vector3& position, const Vector::Vector3& direction);
	// Constructor
	Light(const Light& copy);	
	Light& operator=(const Light& copy);	
	// Attributs
	Vector::Vector3 position;
	Vector::Vector3 direction;	
};
//-----------------------------------------------------------------------------

}

#endif //LIGHT_HPP
